package com.ry.bhwktapp.home.ui

import android.os.Build
import androidx.annotation.RequiresApi

//TODO map集合的使用
@RequiresApi(Build.VERSION_CODES.N)
fun main() {
//    声明一个map
    val mapOf = mapOf("k" to "key", "v" to "value")
    val get = mapOf.get("k")
    println(mapOf)
    println(get)

//    声明一个map 这种方式跟上面的一样，都是可以的
    val mapOfq = mapOf(Pair("h","height"),Pair("w","with"))
    val put = mapOfq.get("h")
    println(mapOfq)
    println(put)


    //TODO 如何读取一个map
    val mapOf1 = mapOf("hhh" to 123, "kkk" to 234)
    //第一种读法：取不到值时候返回null
    val get1 = mapOf1.get("hhh")
    val get2 = mapOf1.get("hhh3")
    println(get1)
    println(get2)
    println(mapOf1["hhh"])//get和这个方法都行
//    println(mapOf1.getValue("hhh3"))//这种方式坚决不要使用，会崩溃的

    //第二种读法：
    val orElse = mapOf1.getOrElse("hhh") { -1 }
    println(orElse)
    val orElse1 = mapOf1.getOrElse("hhh3") { -1 }
    println(orElse1)

    //第三种读法：
    val orElse3 = mapOf1.getOrDefault("hhh") { -2 }
    println(orElse3)
    val orElse4 = mapOf1.getOrDefault("hhh4",-2)
    println(orElse4)

    //TODO map的遍历 四种方式遍历
    val mapFor = mapOf("k1" to ("v1"), "k2" to ("v2"), "k3" to ("v3"), "k4" to ("v4"))
//    第一种方式遍历
    mapFor.forEach { k, v ->
        println(v)
    }
//    第二种方式遍历
    mapFor.forEach{
        println(it.value)
    }
//    第三种方式遍历
    mapFor.forEach { (key, value) ->
        println(key)
        println(value)
    }
//    第四种方式遍历
    for (item in mapFor) {
        println(item.value)
    }

    //可变map的使用
    val mutableMapOf = mutableMapOf(Pair("k", "你好"), Pair("k1", "你好1"), "k2" to "你好2", "k3" to ("你好3"))
    mutableMapOf+="k4" to "你好4"
    mutableMapOf+="k5" to "你好5"
    mutableMapOf-="k5" //删除数据
    mutableMapOf["k6"] = "你好6"


    //如果一个map中没有这个元素，就添加上去
    mutableMapOf.getOrPut("k4"){"你好4"}
    mutableMapOf.getOrPut("k7"){"你好7"}

    mutableMapOf.forEach { (k, v) ->
        println(v)
    }

}